<?php
namespace app\model;

use think\Model;

/**
 * MQTT消息日志模型 - 使用第二个数据库连接
 */
class MqttLog extends Model
{
    // 指定数据表名
    protected $table = 'log';
    
    // 指定使用第二个数据库连接
    protected $connection = 'db_config2';
    
    // 设置字段信息
    protected $field = [
        'id', 'imei', 'iccid', 'content', 'createtime'
    ];
    
    // 关闭自动时间戳（使用自定义的createtime字段）
    protected $autoWriteTimestamp = false;
    
    /**
     * 记录MQTT消息
     * @param string $imei 设备IMEI
     * @param array $messageData 消息数据
     * @param string $iccid 设备ICCID（可选）
     * @return bool 是否成功
     */
    public static function logMessage($imei, $messageData, $iccid = ''): bool
    {
        try {
            $log = new self();
            return $log->save([
                'imei' => $imei,
                'iccid' => $iccid,
                'content' => json_encode($messageData, JSON_UNESCAPED_UNICODE),
                'createtime' => date('Y-m-d H:i:s')
            ]);
        } catch (\Throwable $e) {
            \think\facade\Log::error("记录MQTT日志失败: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * 根据IMEI获取日志
     * @param string $imei 设备IMEI
     * @param int $limit 限制条数
     * @return array
     */
    public static function getByImei($imei, $limit = 10): array
    {
        return self::where('imei', $imei)
                   ->order('createtime desc')
                   ->limit($limit)
                   ->select()
                   ->toArray();
    }
    
    /**
     * 清理旧日志（保留最近N天的数据）
     * @param int $days 保留天数
     * @return int 删除的记录数
     */
    public static function cleanOldLogs($days = 30): int
    {
        $cutoffDate = date('Y-m-d H:i:s', strtotime("-{$days} days"));
        return self::where('createtime', '<', $cutoffDate)->delete();
    }
}
